package com.ruoyi.system.xxkutil;

import com.ruoyi.system.domain.XxkCarte;
import com.ruoyi.system.domain.request.BaseTransRequest;

import java.util.Comparator;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class XxkUtils {


    public static XxkCarte getOneCarte(List<XxkCarte> xxkCarteList, BaseTransRequest request){

        if("random".equalsIgnoreCase(request.getPolicy())){
             XxkCarte randomElement = getRandomElement(xxkCarteList);
            return randomElement;
        }else   if("weight".equalsIgnoreCase(request.getPolicy())){
            XxkCarte maxWeightElement = getMaxWeightElement(xxkCarteList);
            return maxWeightElement;
        }else{
            return xxkCarteList.get(0);
        }
    }

    private static <T> T getRandomElement(List<T> list) {
        if (list == null || list.isEmpty()) {
            return null;
        }
        // 生成一个 0 到 list.size() - 1 之间的随机索引
        int randomIndex = ThreadLocalRandom.current().nextInt(list.size());
        // 根据随机索引获取元素
        return list.get(randomIndex);
    }

    private static XxkCarte getMaxWeightElement(List<XxkCarte> list) {
        if (list == null || list.isEmpty()) {
            return null;
        }
        // 使用 Comparator 对列表进行降序排序
        list.sort(Comparator.comparingLong(XxkCarte::getWeight).reversed());
        // 取排序后列表的第一个元素，即 weight 最大的元素
        return list.get(0);
    }
    /**
     * 将 HTML 内容中的相对地址替换为绝对地址
     * @param htmlContent HTML 内容
     * @param baseUrl 服务器根 URL
     * @return 修改后的 HTML 内容
     */
    public static String replaceRelativeUrls(String htmlContent, String baseUrl) {
        // 匹配 <script> 标签中的 src 属性
        String scriptPattern = "<script\\s+src=\"([^\"]+)\"";
        htmlContent = replaceUrls(htmlContent, scriptPattern, baseUrl);

        // 匹配 <link> 标签中的 href 属性
        String linkPattern = "<link\\s+[^>]*href=\"([^\"]+)\"";
        htmlContent = replaceUrls(htmlContent, linkPattern, baseUrl);

        // 匹配 <img> 标签中的 src 属性
        String imgPattern = "<img\\s+[^>]*src=\"([^\"]+)\"";
        htmlContent = replaceUrls(htmlContent, imgPattern, baseUrl);
        return htmlContent;
    }

    /**
     * 使用正则表达式替换 URL
     * @param htmlContent HTML 内容
     * @param pattern 正则表达式模式
     * @param baseUrl 服务器根 URL
     * @return 修改后的 HTML 内容
     */
    private static String replaceUrls(String htmlContent, String pattern, String baseUrl) {
        Pattern regex = Pattern.compile(pattern);
        Matcher matcher = regex.matcher(htmlContent);
        StringBuffer sb = new StringBuffer();

        while (matcher.find()) {
            String relativeUrl = matcher.group(1);
            String absoluteUrl = baseUrl + relativeUrl;
            matcher.appendReplacement(sb, matcher.group().replace(relativeUrl, absoluteUrl));
        }
        matcher.appendTail(sb);

        return sb.toString();
    }
}
